Software is seldom without errors, as humans are prone to make mistakes when writing code. Some errors may be innocuous, while others may result in serious security vulnerabilities or performance problems. Various tools exist to help developers in finding errors in their code. Such tools may comprise static analysis tools, which perform an analysis upon code that is not executed, and dynamic analysis tools, which perform an analysis upon the behavior of executed code. The tools may analyze source code and/or compiled code. Implementation techniques of the analysis may include model checking, data-flow analysis, abstract interpretation, Hoare logic, symbolic execution, and so on.